package cn.yeziji.forum.config;

import cn.yeziji.forum.entity.ForumDetailsEntity;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

/**
 * caffeine 缓存配置
 *
 * @author gzkemays
 * @since 2021/12/21 20:35
 */
@Configuration
public class CaffeineConfig {
  @Bean(name = "filterLoginCache")
  public Cache<String, Object> filterLoginCache() {
    return Caffeine.newBuilder()
        // 设置最后一次写入或访问后经过固定时间过期
        .expireAfterWrite(60, TimeUnit.SECONDS)
        // 初始的缓存空间大小
        .initialCapacity(100)
        // 缓存的最大条数
        .maximumSize(1000)
        .build();
  }

  @Bean(name = "detailCache")
  public Cache<String, ForumDetailsEntity> forumDetailsEntityCache() {
    return Caffeine.newBuilder()
        // 设置最后一次写入或访问后经过固定时间过期
        .expireAfterWrite(1, TimeUnit.DAYS)
        // 初始的缓存空间大小
        .initialCapacity(500)
        // 缓存的最大条数
        .maximumSize(10000)
        .build();
  }

  @Bean(name = "fileMd5")
  public Cache<String, String> fileMd5() {
    return Caffeine.newBuilder()
        // 初始的缓存空间大小
        .initialCapacity(500)
        // 缓存的最大条数
        .maximumSize(50000)
        .build();
  }

  @Bean(name = "userWebsocketCache")
  public Cache<String, String> userWebsocketCache() {
    return Caffeine.newBuilder()
        // 初始的缓存空间大小
        .initialCapacity(100)
        // 缓存的最大条数
        .maximumSize(1000)
        .build();
  }
}
